# 三、循环语句
# 3.1 while循环语句的基本使用
"""
while 条件:
    条件满足做的事情1
    条件满足做的事情2
    ...
写法和if语句是类似的
"""
import random

# 求1-100的和
# num = 1
# sum = 0
# while num <= 100:
#     sum += num
#     num += 1
# print(f"1-100的和: {sum}")

# 猜数字
# sum = 0 # 猜了多少次
# random_num = random.randint(1, 100)
# print(random_num)
# while True:
#     user_input = int(input("请输入1-100的数: "))
#     sum += 1
#     if user_input > random_num:
#         print("猜大了")
#     elif user_input < random_num:
#         print("猜小了")
#     else:
#         print(f"您猜了{sum}次，终于猜对了~")
#         break

# 3.2 while循环的嵌套
"""
print函数的补充
print函数默认打印会自动换行，如果不想使其换行，在print语句中加上end=''
"""
# print("hello world", end='')

# 使用while循环打印9*9乘法表
# i = 1
# while i <= 9:
#     j = 1
#     while j <= i:
#         print(f"{i} * {j} = {i * j}\t", end='')
#         j += 1
#     print() # 输出换行
#     i += 1

# 3.3 for循环
# 3.3.1 基础语法
"""
for 临时变量 in 序列类型
    循环满足条件时执行的代码1
    循环满足条件时执行的代码2
    循环满足条件时执行的代码3
    ...
说明: 序列类型就是其内容可以一个个依次取出来的一种类型。常见的序列类型有字符串、列表、元组等。
"""
# 遍历字符串
# words = "hello world"
# for i in words: # 将words变量中的字符串的字符依次赋值给i
#     print(i,end='')

# 定义字符串"hello wrold",数一数字符串中有几个l
# count = 0
# str = "hello world"
# for char in str:
#     if char == 'l':
#         count += 1
# print(f"\"hello world\"中一共有{count}个'l'") # 3

# 3.3.2 range语句
"""
语法1
range(num):获取一个从0开始，到num结束的数字序列(不包含num)

语法2:
range(num1, num2):获得一个从num1开始，到num2结束的数字序列(不含num2)

语法3:
range(num1, num2, step):获得一个从num1开始，到num2结束的数字序列(不含num2)，
                        数字之间的步长以step为准(默认是1)
                        如，range(5,10,2)获取的数据是[5,7,9]
"""

# 语法1
# for i in range(10): # 生成[1,9]的数字序列依次赋值给i
#     print(i, end=' ')

# print()

# 语法2
# for i in range(2, 10): # 生成[2,9]的数字序列依次赋值给i
#     print(i, end=' ')

# print()

# 语法3
# for i in range(1, 11, 2): # 打印1-10之间的所有奇数
#     print(i,end=' ')

# 练习案例: 有几个偶数
# 定义一个数字变量num，内容随意
# 使用range()语句，获取从1-num的序列，用for循环遍历它，在遍历的过程中，统计有多少个偶数出现，其中不包括num

# num = 100
# count = 0
# for i in range(1, num):
#     if i % 2 == 0:
#         count += 1
# print(f"1到{num}(不包含{num}本身)范围内, 有{count}个偶数")

# 3.3.3 for循环临时变量的作用域
"""
for i in range(num):
    xxxx
    xxxx
print(i) # 能否访问到i

答案是：从规范上是不允许的，而实际上确可以。但建议不要这么做
说明：如果真的想访问for循环中的临时变量，仅需在for循环之前定义即可
"""
# i = 0
# for i in range(0, 9):
#     print(i, end=' ')
# print()
# print(i, end=' ') # i的作用域在for循环内

# 3.3 嵌套for循环
# 使用for循环打印99乘法表
# for i in range(1, 10):
#     for j in range(1, i + 1):
#         print(f"{i} * {j} = {i * j}\t", end='')
#     print()

# 3.4 循环中的continue和break
"""
continue用于中断本次循环，直接进入下一次循环(适用于while和for)
"""
# 打印1~100之间的偶数
# for i in range(1, 101):
#     if i % 2 == 1: # 奇数
#         continue
#     print(i, end=' ')

"""
break用于中断整个循环(适用于while和for)
"""
# 打印1~100，但只打印到50就停止
# for i in range(1, 101):
#     print(i, end=' ')
#     if i == 50:
#         break

# 循环的综合使用
"""
某公司, 账户余额有1w元，给20名员工发工资。
1. 员工编号从1·20，依次领工资，每人可以领取1000元
2. 领工资时，财务判断员工的绩效分[1,10](随机生成)，如果低于5，不发工资，换下一位
3. 如果工资发完了，结束发工资
"""
money = 10000
for i in range(1, 21):
    score = random.randint(1, 10)
    if money <= 0:
        print("工资发完了，下一个月再来吧")
        break

    if score < 5:
        print(f"员工{i},绩效分{score},低于5分,不发工资，下一位。")
        continue
    else:
        money -= 1000
        print(f"向员工{i}发放工资1000元, 账户余额还剩下{money}元")
